
import router from '@/router'
import store from '@/store'
import axios from 'axios'
// 导入 $message 消息提示框
import { Message } from 'element-ui'
// create an axios instance
// process.env:当前进程的环境变量
const service = axios.create({
  // 请求根路径
  // 相当于写的VUE_APP_BASE_API = '/dev-api'
  // 开发时候 的接口  和上线时候的接口 是不一样的
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // 设置超时 request timeout
})
// 请求拦截器
service.interceptors.request.use((config) => {
// 拿到 token
  const token = store.getters.token
  // 在请求头里加入 token  Bearer持证人 后面一定要加空格
  config.headers.Authorization = 'Bearer ' + token
  return config
}, (err) => {
  // 抛出错误
  return Promise.reject(new Error(err))
})
// axios 响应拦截器
// axios.interceptors.response.use(function (response) {
//   // 对响应数据做点什么
//   return response;
// }, function (error) {
//   // 对响应错误做点什么
//   return Promise.reject(error);
// });

// 响应拦截器
service.interceptors.response.use((response) => {
  // 1.将axios 返回数据解一层壳
  // console.log('1112332')
  // console.log(response)
  const res = response.data
  // console.log(res)
  // 解构 出来 message  和 success
  const { message, success } = res
  // 统一业务判定 状态 是否成功
  if (!success) {
    Message.error(message)
    // console.log('11122')
    return Promise.reject(new Error(message))
  }
  return res
  // 如果拦截器拦截判断代码有错误 有则抛出错误
}, (error) => {
// 当服务器 返回错误401.400.500都会走拦截器 的第二个回调 表示 失败
// 筛选错误  先处理token失效的错误
  if (error.response.status === 401 && error.response.data.code === 10002) {
    // 处理token
    // 1.弹出失败错误提示
    Message.error(error.response.data.message)

    // 跳转登录页
    router.push('/login')
    // 2.清空用户数据 (失效的token 和userInfo)
    store.dispatch('user/removeData')
  } else {
    // 其他的错误处理
    console.dir(error)
    Message.error(error.response.data.message)
  }
  return Promise.reject(error)
})

export default service
